/*
 * OknoRozmowy.java
 *
 * Created on 15 maj 2009, 13:32
 */

package BasaSobol;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.util.ArrayList;
import javax.swing.JComboBox;


/**
 *
 * @author  bąsa
 */
public class OknoRozmowy extends javax.swing.JFrame implements ActionListener {
    /**
     * Lista referencji do otwartych okien rozmowy
     */
    static ArrayList<OknoRozmowy> otwarteRozmowy = new ArrayList<OknoRozmowy>();

    /**
     * @param r login, dla ktorego okienka szukamy
     * @return referencja na okienko rozmowy jeśli jest otwarte, null w przeciwnym przypadku
     */
    static public OknoRozmowy znajdzWgRozmowcy(String r) {
        for(int i = 0; i < otwarteRozmowy.size(); i++) {
            if(otwarteRozmowy.get(i).rozmowca.equals(r)) {
                return otwarteRozmowy.get(i);
            }
        }
        
        return null;
    }

    /**
     * Login osoby z którą prowadzona jest rozmowa
     */
    String rozmowca;
    
    class Wiadomosc {
        String tresc; 
    }
    /**
     * Lista wszystkich wiadomości z toczącej się rozmowy
     */
    ArrayList<Wiadomosc> rozmowa ;

    /**
     * Zapisuje rozmowę na koniec pliku archiwum.txt
     */
    private void zapiszRozmowe() {
        FileWriter fstream = null;
        
        try {
            fstream = new FileWriter("archiwum.txt", true);
        } catch(Exception e) {
            
        }
        
        for(int i = 0; i < rozmowa.size(); i++) {
            try {
                fstream.write(rozmowa.get(i).tresc + "\n");
            } catch (Exception e) {
                
            }
        }
        
        try {
            fstream.close();
        } catch(Exception e) {
        }
    }
    
    /** Creates new form OknoRozmowy */        
    public OknoRozmowy(String rozmowca_) {
        rozmowca = new String(rozmowca_);
        rozmowa = new ArrayList<Wiadomosc>() ;
        initComponents();
        this.setTitle(rozmowca);
        otwarteRozmowy.add(this);
        
        addWindowListener(new WindowAdapter() {
            @Override
          public void windowClosing(WindowEvent e) {
            for(int i = 0; i < otwarteRozmowy.size(); i++) {
                if(otwarteRozmowy.get(i).rozmowca.equals(rozmowca)) {
                    otwarteRozmowy.remove(i);
                    break;
                }
            }
            
            zapiszRozmowe();
          }
        });
        
        listaEmotikonki.addActionListener(this);
        poleRozmowy.setEditable(false);
    }

    /**
     * Dodaje nową wiadomość do listy rozmowy oraz wyświetla ją na ekranie
     * @param tresc treść wiadomości
     */
    private void dodajWiadomosc( String tresc){
        Wiadomosc w = new Wiadomosc();
        w.tresc = tresc;
        rozmowa.add(w);
        poleRozmowy.append(tresc);
        poleRozmowy.append("\n");
    }
    
    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        poleRozmowy = new javax.swing.JTextArea();
        poleDoWpisywaniaWiadomosci = new javax.swing.JTextField();
        przyciskWyslijWiadomosc = new javax.swing.JButton();
        listaEmotikonki = new javax.swing.JComboBox();

        //setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        poleRozmowy.setColumns(20);
        poleRozmowy.setRows(5);
        jScrollPane1.setViewportView(poleRozmowy);

        przyciskWyslijWiadomosc.setText("Wyślij");

        listaEmotikonki.setModel(new javax.swing.DefaultComboBoxModel(new String[] { ";)", ";(", "( Y )", ":P" }));

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 408, Short.MAX_VALUE)
            .addComponent(poleDoWpisywaniaWiadomosci, javax.swing.GroupLayout.DEFAULT_SIZE, 408, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addComponent(przyciskWyslijWiadomosc)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(listaEmotikonki, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(253, 253, 253))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 255, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(poleDoWpisywaniaWiadomosci, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(przyciskWyslijWiadomosc)
                    .addComponent(listaEmotikonki, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        przyciskWyslijWiadomosc.addActionListener(this);
       
        pack();
    }
    
    /**
     * @param args the command line arguments
     */
//    public static void main(String args[]) {
//        java.awt.EventQueue.invokeLater(new Runnable() {
//            public void run() {
//                new OknoRozmowy().setVisible(true);
//            }
//        });
//    }
    

    private javax.swing.JButton przyciskWyslijWiadomosc;
    private javax.swing.JComboBox listaEmotikonki;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea poleRozmowy;
    private javax.swing.JTextField poleDoWpisywaniaWiadomosci;

    public void odbierzWiadomosc(String wiadomosc) {
        dodajWiadomosc(wiadomosc);
    }
    
    private void PrzyciskWyslijKlikniety(ActionEvent e) {
        String ip = new String(Klienci.znajdzIPPoLoginie(rozmowca));
        tinsiec.Message msg = new tinsiec.Message(ip, modulXML.wiadomoscDoWyslania(poleDoWpisywaniaWiadomosci.getText()));
        Main.wiadomosciWychodzace.add(msg);
        dodajWiadomosc("Ja: " + poleDoWpisywaniaWiadomosci.getText());
        poleDoWpisywaniaWiadomosci.setText("");
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("Wyślij")) {
            PrzyciskWyslijKlikniety(e);
        } else {
            JComboBox cb = (JComboBox)e.getSource();
            poleDoWpisywaniaWiadomosci.setText(poleDoWpisywaniaWiadomosci.getText() + " " + (String)cb.getSelectedItem());
        }
        
        
        
    }
    
    
}
